<?php

namespace core;

use think\Template;

class Controller
{

    private $temp;

    protected $_vars = [];

    /**
     * action前执行的全局方法，可继承并重构
     */
    public function _before_action()
    {

    }

    /**
     * action后执行的全局方法,可继承并重构
     */
    public function _after_action()
    {

    }

    /**
     * 魔术方法
     */
    public function __call($name, $arguments)
    {
        echo "error url 404";
    }


    /**
     * 系统初始化函数，主要初始化模板引擎，定义一些主要的全局模板路径
     * @param string $m 模块名称
     * @param string $c 控制器名称
     */
    public function _sys_init_action(string $m, string $c): void
    {
        $template = Config::get('view');

        if (strtoupper($template['default']) == strtoupper('ThinkPHP')) {
            //设置模板引擎参数
            $configTemp = [
                'view_path' => VIEWS_PATH . $m . "/" . strtolower($c) . '/',
                'cache_path' => TEMP_PATH,
            ];
            $options = $configTemp + $template['options'];

            $this->temp = new Template();
            $this->temp->config($options);
        } else {
            //其他模板引擎

        }

    }

    /**
     * 模板参数绑定
     * @param $name
     * @param null $value
     */
    public function assign($name, $value = null)
    {
        $this->_vars = \array_merge($this->_vars, \is_array($name) ? $name : [$name => $value]);
    }

    /**
     * 获取模板解析后的内容
     * @param String $tplName 模板名称
     * @param String|array $value 模板数据
     * @return String 模板解析后的内容
     */
    public function fetch(string $tplName, $value = [])
    {
        $view_suffix = config('view')['options']['view_suffix'] != '' ? config('view')['options']['view_suffix'] : 'html';
        $temp = VIEWS_PATH . fileRoutePatch($tplName) . '.' . $view_suffix;
        if (file_exists($temp)) {
            $value = \array_merge($this->_vars, $value);
            return $this->temp->fetch($tplName, $value);
        } else {
            header('Content-Type:application/json; charset=utf-8');
            echo "404 The page not found：" . $temp;
        }
    }

    /**
     * 系统自带跳转提示 success
     * @param string $msg
     * @param string $url
     * @return string
     */
    public function success(string $msg, string $url = '/')
    {
        $data['code'] = 1;
        $data['msg'] = $msg;
        $data['url'] = url($url);
        $data['wait'] = 3;
        return $this->temp->fetch(CORE_PATH . 'temp/toast.html', $data);
    }

    /**
     * 系统自带跳转提示 error
     * @param string $msg
     * @param string $url
     * @return string
     */
    public function error(string $msg, string $url = '')
    {
        $data['code'] = 0;
        $data['msg'] = $msg;
        $data['url'] = url($url);
        $data['wait'] = 3;
        return $this->temp->fetch(CORE_PATH . 'temp/toast.html', $data);
    }

}
